# -*- coding: utf-8 -*-            
# @Author : HJH
# @Time : 2024/2/19 10:59
# @Use :
import json
import time
from io import BytesIO

import pandas as pd
import requests
from loguru import logger


def send_ycapi_request():
    """
    发送请求的函数，这里使用requests库发送请求。
    :return: pandas df对象
    """
    url = "http://192.168.110.135:6181/api/czndc/flightcabin2"

    # 打开文件
    with open(r'.\request.json', 'r') as file:
        # 读取文件内容
        data = file.read()

        # 解析 JSON 数据
        payload = json.loads(data)

    headers = {"content-type": "application/json"}

    logger.info("南航R舱数据请求中... ...")
    response = requests.request("POST", url, json=payload, headers=headers, timeout=3000)
    # logger.info(response.text)
    # 检查响应状态码是否为200
    if response.status_code == 200:
        try:
            rs_json = json.loads(response.text)
            logger.error('南航R舱数据请求失败：{}'.format(rs_json))
            raise RuntimeError("发生错误，程序停止")

        except json.decoder.JSONDecodeError:

            # 读取响应中的数据流
            data_stream = response.content

            # 使用 pd.ExcelFile 打开数据框
            rnum_excel_file = pd.ExcelFile(BytesIO(data_stream), engine='openpyxl')

            # 假设保存的文件名为 "output.xlsx"
            output_file = r'./CZ航线R舱数量低价舱New.xlsx'

            # 从 rnum_excel_file 中获取 Excel 内容
            rnum_content = pd.read_excel(rnum_excel_file, sheet_name=None)

            # 创建一个 ExcelWriter 对象
            writer = pd.ExcelWriter(output_file, engine='xlsxwriter')

            # 遍历每个 Sheet 页，并将其保存到输出文件中
            for sheet_name, df in rnum_content.items():
                df.to_excel(writer, sheet_name=sheet_name, index=False)

            # 关闭 ExcelWriter，保存文件
            writer._save()
            writer.close()

            logger.info("南航R舱数请求结束。")
            logger.info("文件已更新保存")

    else:
        logger.error('文件下载失败，状态码：{}'.format(response.status_code))


if __name__ == '__main__':
    sleep_time = input("请输入间隔时间(分钟):")

    while True:
        send_ycapi_request()
        logger.info(f"下次执行时间 {sleep_time} 分钟后... ...")
        time.sleep(int(sleep_time) * 60)
